#ifndef __Platform_hpp__
#define __Platform_hpp__

#ifndef _CRT_SECURE_NO_WARNINGS
#    define _CRT_SECURE_NO_WARNINGS
#endif

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <stdarg.h>
#include <math.h>
#include <float.h>
#include <new>

#if defined( DEBUG ) || defined( _DEBUG )
#    define GE_DEBUG
#endif

#define GE_PACK __pragma( pack( push, 1 ) ) 
#define GE_PACKED
#define GE_UNPACK ;__pragma( pack( pop ) )
#define GE_QUOTE( x ) #x
#define GE_QUOTE_IN_PLACE( x ) GE_QUOTE( x )
#define __HERE__ __FILE__ "(" GE_QUOTE_IN_PLACE( __LINE__ ) ")"
#define GE_COMPILER_MESSAGE( _prefix, _msg ) __pragma( message( __HERE__ " : " _prefix " : " _msg ) )
#define geCompilerMsg( _prefix, _msg ) GE_COMPILER_MESSAGE( _prefix, _msg )
#define geToDo( _text ) geCompilerMsg( "ToDo", _text )
#define geFixMe( _text ) geCompilerMsg( "FixMe", _text )
#define geWarning( _text ) geCompilerMsg( "Warning", _text )
#define geChoose( _cond, _a, _b ) ( ( _cond ) ? ( _a ) : ( _b ) )

namespace ge {

//----------------------------------------------------------------------------//
// 
//----------------------------------------------------------------------------//

typedef unsigned __int8 uint8;
typedef unsigned __int16 uint16;
typedef unsigned __int32 uint32;
typedef unsigned __int64 uint64;
typedef signed __int8 int8;
typedef signed __int16 int16;
typedef signed __int32 int32;
typedef signed __int64 int64;
typedef float float32;
typedef double float64;
typedef unsigned int uint; 

//----------------------------------------------------------------------------//
// 
//----------------------------------------------------------------------------//

struct OsEvent
{
     void* window;
     uint msg;
     uint w_param;
     long l_param;
     long result;
};

} // namespace ge

#endif//__Platform_hpp__
